# https://blog.csdn.net/fengguangke/article/details/81709215
# unittest之TestSuite类详解
# TestSuite
# 测试套件类，如何理解测试套件这个概念呢，从它的类定义来看，可以理解为：
# 多个独立的测试用例（test case）或者多个独立的测试套件（test suite，可以理解为子套件）
# 可以构成一个测试套件，
# 那么我们写好了一个用例之后，如果去构建一个测试套件呢。下面介绍几种构建测试套件的方法：
# 1. 通过unittest.TestSuite()类直接构建，或者通过TestSuite实例的addTests、addTest方法构建
# 2. 通过unittest.TestLoader类的discover、loadTestsFromTestCase、
#   loadTestsFromModule、loadTestsFromName、loadTestsFromNames这五个方法去构建
# 3. 通过unittest.makeSuite()、unittest.findTestCases()这两个方法去构建

import sys
import unittest


class UserCase(unittest.TestCase):

    def testAddUser(self):  # test method names begin with 'test'
        print("add a user")

    def testDelUser(self):
        print("delete a user")


if __name__ == '__main__':
    # 通过unittest.TestSuite()类直接构建,
    # 或者通过TestSuite实例的addTests、addTest方法构建
    suite = unittest.TestSuite(map(UserCase, ['testAddUser', 'testDelUser']))
    suite2 = unittest.TestSuite()
    suite2.addTests(map(UserCase, ['testAddUser', 'testDelUser']))
    suite3 = unittest.TestSuite()
    suite3.addTest(UserCase('testAddUser'))
    suite3.addTest(UserCase('testDelUser'))

    # 通过unittest.TestLoader类的discover、loadTestsFromTestCase、
    # loadTestsFromModule、loadTestsFromName、loadTestsFromNames这五个方法去构建
    module = __import__(__name__)
    suite4 = unittest.TestLoader().discover('PythonPrograming/basic',
                                            '_11_1_test_suite.py')  # 当前目录则使用.
    suite5 = unittest.TestLoader().loadTestsFromTestCase(UserCase)
    suite6 = unittest.TestLoader().loadTestsFromModule(module)
    # loadTestsFromName、loadTestsFromNames暂时不举例了，参数类型较多，不便举例，可以自行阅读其代码

    # 通过unittest.makeSuite()、unittest.findTestCases()这两个方法去构建
    module = __import__(__name__)
    suite7 = unittest.makeSuite(UserCase, prefix='test')  # 默认前缀为test
    suite8 = unittest.findTestCases(module, prefix='test')  # 默认前缀为test

    unittest.TextTestRunner().run(suite3)
    suite2.run(unittest.TextTestResult(sys.stdout, 'test result', 1))
